package com.Zhu.demo.service.Impl;

import com.Zhu.demo.pojo.User;
import com.Zhu.demo.repository.UserRepository;

import com.Zhu.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.cache.annotation.Caching;
import org.springframework.stereotype.Service;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserRepository userRepository;

    // 查询所有用户（缓存整个结果集）
    @Cacheable(value = "users", key = "'allUsers'")  // 缓存键为 'allUsers'
    @Override
    public Iterable<User> SelectUserAll() {
        return userRepository.findAll();
    }

    // 新增用户（清除所有用户缓存）
    @CacheEvict(value = "users", allEntries = true)  // 清除 'users' 下的所有缓存
    @Override
    public void UserAdd(User user) {
        userRepository.save(user);
    }

    // 删除用户（清除单条和所有用户缓存）
    @Caching(evict = {
            @CacheEvict(value = "users", key = "#userId"),  // 清除单用户缓存
            @CacheEvict(value = "users", allEntries = true)  // 同时清除所有用户列表缓存
    })
    @Override
    public void UserDelete(Integer userId) {
        userRepository.deleteById(userId);
    }

    // 根据ID查询用户（缓存单条）
    @Cacheable(value = "users", key = "#userId")  // 缓存键为用户ID
    @Override
    public User SelectUser(Integer userId) {
        return userRepository.findById(userId).get();
    }


    // 更新用户（清除单条和所有用户缓存）
    @Caching(evict = {
            @CacheEvict(value = "users", key = "#user.userId"),  // 清除单用户缓存
            @CacheEvict(value = "users", allEntries = true)   // 清除所有用户列表缓存
    })
    @Override
    public void UserUpdate(User user) {
        userRepository.save(user);
    }

}
